﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Runtime;
using System.Runtime.InteropServices;

namespace PickGold
{
	/// <summary>
	/// 空类型类，所有派生成员都返回空。
	/// </summary>
	[Serializable]
	[ComVisible(true)]
	[ClassInterface(ClassInterfaceType.None)]
	[ComDefaultInterface(typeof(_Type))]
	public sealed class EmptyType : Type, _Type
	{
		/// <summary>
		/// Empty Type
		/// </summary>
		public readonly static Type Empty = new EmptyType();

		private EmptyType()
		{
		}

		/// <summary>
		/// 
		/// </summary>
		public override Assembly Assembly
		{
			get
			{
				//throw new NotImplementedException();
				return null;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		public override string AssemblyQualifiedName
		{
			get
			{
				//throw new NotImplementedException();
				return string.Empty;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		public override Type BaseType
		{
			get
			{
				//throw new NotImplementedException();
				return null;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		public override string FullName
		{
			get
			{
				//throw new NotImplementedException();
				return string.Empty;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		public override Guid GUID
		{
			get
			{
				//throw new NotImplementedException();
				return Guid.Empty;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		protected override TypeAttributes GetAttributeFlagsImpl()
		{
			//throw new NotImplementedException();
			return default(TypeAttributes);
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="bindingAttr"></param>
		/// <param name="binder"></param>
		/// <param name="callConvention"></param>
		/// <param name="types"></param>
		/// <param name="modifiers"></param>
		/// <returns></returns>
		protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public override Type GetElementType()
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override EventInfo GetEvent(string name, BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override EventInfo[] GetEvents(BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override FieldInfo GetField(string name, BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override FieldInfo[] GetFields(BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="ignoreCase"></param>
		/// <returns></returns>
		public override Type GetInterface(string name, bool ignoreCase)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public override Type[] GetInterfaces()
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="bindingAttr"></param>
		/// <param name="binder"></param>
		/// <param name="callConvention"></param>
		/// <param name="types"></param>
		/// <param name="modifiers"></param>
		/// <returns></returns>
		protected override MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override MethodInfo[] GetMethods(BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override Type GetNestedType(string name, BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override Type[] GetNestedTypes(BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="bindingAttr"></param>
		/// <returns></returns>
		public override PropertyInfo[] GetProperties(BindingFlags bindingAttr)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="bindingAttr"></param>
		/// <param name="binder"></param>
		/// <param name="returnType"></param>
		/// <param name="types"></param>
		/// <param name="modifiers"></param>
		/// <returns></returns>
		protected override PropertyInfo GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		protected override bool HasElementTypeImpl()
		{
			//throw new NotImplementedException();
			return false;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="invokeAttr"></param>
		/// <param name="binder"></param>
		/// <param name="target"></param>
		/// <param name="args"></param>
		/// <param name="modifiers"></param>
		/// <param name="culture"></param>
		/// <param name="namedParameters"></param>
		/// <returns></returns>
		public override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		protected override bool IsArrayImpl()
		{
			//throw new NotImplementedException();
			return false;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		protected override bool IsByRefImpl()
		{
			//throw new NotImplementedException();
			return false;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		protected override bool IsCOMObjectImpl()
		{
			//throw new NotImplementedException();
			return false;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		protected override bool IsPointerImpl()
		{
			//throw new NotImplementedException();
			return false;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		protected override bool IsPrimitiveImpl()
		{
			//throw new NotImplementedException();
			return false;
		}

		/// <summary>
		/// 
		/// </summary>
		public override Module Module
		{
			get
			{
				//throw new NotImplementedException();
				return null;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		public override string Namespace
		{
			get
			{
				//throw new NotImplementedException();
				return string.Empty;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		public override Type UnderlyingSystemType
		{
			get
			{
				//throw new NotImplementedException();
				return null;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="attributeType"></param>
		/// <param name="inherit"></param>
		/// <returns></returns>
		public override object[] GetCustomAttributes(Type attributeType, bool inherit)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="inherit"></param>
		/// <returns></returns>
		public override object[] GetCustomAttributes(bool inherit)
		{
			//throw new NotImplementedException();
			return null;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="attributeType"></param>
		/// <param name="inherit"></param>
		/// <returns></returns>
		public override bool IsDefined(Type attributeType, bool inherit)
		{
			//throw new NotImplementedException();
			return false;
		}

		/// <summary>
		/// 
		/// </summary>
		public override string Name
		{
			get
			{
				//throw new NotImplementedException();
				return string.Empty;
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		public override string ToString()
		{
			//return base.ToString();
			return string.Empty;
		}
	}
}
